﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Metadata.Edm;
using System.Web.Mvc;

namespace SoftHotel.Models
{
    public class DetalleReservaHabDAO : DbContext
    {
        public List<DetalleReservaHab> detalles = new List<DetalleReservaHab>() { };
        public List<DetalleReservaHab> busquedadet = new List<DetalleReservaHab>() { };
        
        public DetalleReservaHabDAO() : base("conexionPrincipalDAO") { }
        
        private Conexion conexionBD = new Conexion();

        public DbSet<DetalleReservaHab> detreserva { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<DetalleReservaHab>().ToTable("DETALLERESERVA");
            modelBuilder.Entity<Ambiente>().ToTable("Ambiente");
        }

        public List<DetalleReservaHab> ejecutar_query()
        {
            string consulta = "";
            //conexionBD.AbrirConexion();
            List<DetalleReservaHab> detalleReservaHabs = new List<DetalleReservaHab>();

            consulta = "select numeroItem, idAmbiente, precioUnitario, total, estado, cantidad from DETALLERESERVA";

            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            while (dataReader != null && dataReader.Read())
            {
                DetalleReservaHab detalleReservaHab = new DetalleReservaHab();

                detalleReservaHab.numeroItem = Convert.ToInt32(dataReader[0].ToString());
                detalleReservaHab.idAmbiente = Convert.ToInt32(dataReader[1].ToString());
                //detalleReservaHab.precioUnitario = Convert.ToDouble(dataReader[2].ToString());
                //detalleReservaHab.total = Convert.ToDouble(dataReader[3].ToString());
                //detalleReservaHab.estado = Convert.ToInt32(dataReader[4].ToString());
                //detalleReservaHab.cantidad = Convert.ToInt32(dataReader[5].ToString());
               
                detalleReservaHabs.Add(detalleReservaHab);
            }
            conexionBD.CerrarConexion();
            return detalleReservaHabs;
        }

        public void add_detalleReservaHab(DetalleReservaHab detalleReservaHab)
        {
            string insert = "";
            conexionBD.AbrirConexion();
            detalleReservaHab.idDetalleReserva = generarID();
            insert = "INSERT INTO DETALLERESERVA" +
                " VALUES (@idDetalleReserva, @idReserva, @idAmbiente, @numeroItem, @precioUnitario, @fecha, @horainicio, @horafin, @total, @estado, @moneda, @cantidad)";
            
            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = insert;

            command.Parameters.Add("@idDetalleReserva", SqlDbType.Int).Value = detalleReservaHab.idDetalleReserva;
            command.Parameters.Add("@idReserva", SqlDbType.Int).Value = detalleReservaHab.idReserva;
            command.Parameters.Add("@idAmbiente", SqlDbType.Int).Value = detalleReservaHab.idAmbiente;
            command.Parameters.Add("@numeroItem", SqlDbType.Int).Value = detalleReservaHab.numeroItem;
            command.Parameters.Add("@precioUnitario", SqlDbType.Decimal).Value = detalleReservaHab.precioUnitario;
            command.Parameters.Add("@fecha", SqlDbType.DateTime).Value = detalleReservaHab.fecha;
            command.Parameters.Add("@horaInicio", SqlDbType.DateTime).Value = detalleReservaHab.horaInicio;
            command.Parameters.Add("@horaFin", SqlDbType.DateTime).Value = detalleReservaHab.horaFin;
            command.Parameters.Add("@total", SqlDbType.Decimal).Value = detalleReservaHab.total;
            command.Parameters.Add("@estado", SqlDbType.Int).Value = detalleReservaHab.estado;
            command.Parameters.Add("@moneda", SqlDbType.Int).Value = detalleReservaHab.moneda;
            command.Parameters.Add("@cantidad", SqlDbType.Int).Value = detalleReservaHab.cantidad;

            conexionBD.EjecutarComando2(command);
            conexionBD.CerrarConexion();
        }

        public int generarID()
        {
            String consulta = "SELECT MAX(idDetalleReserva) FROM DetalleReserva";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();

            int id = Convert.ToInt32(dataReader[0].ToString());

            return id++;
        }

        public DetalleReservaHab consultar_detalleReservaHab(string codigo)
        {
            String consulta = "";
            consulta = "numeroItem, idAmbiente, estado, cantidad, precioUnitario, from RESERVA where idDetalleReserva = \'" + codigo + "\'";
            conexionBD.AbrirConexion();
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            DetalleReservaHab detalleReservaHab = new DetalleReservaHab();
            dataReader.Read();

            detalleReservaHab.numeroItem = Convert.ToInt32(dataReader[0].ToString());
            detalleReservaHab.idAmbiente = Convert.ToInt32(dataReader[1].ToString());
            detalleReservaHab.precioUnitario = Convert.ToDecimal(dataReader[2].ToString());
            detalleReservaHab.estado = Convert.ToInt32(dataReader[3].ToString());
            detalleReservaHab.cantidad = Convert.ToInt32(dataReader[4].ToString());
            detalleReservaHab.total = Convert.ToDecimal(dataReader[5].ToString());
            
            dataReader.Close();
            conexionBD.CerrarConexion();
            return detalleReservaHab;
        }

       
        public void delete_detalleReservaHab(String id)
        {
            string delete = "";
            conexionBD.AbrirConexion();
            delete = "DELETE FROM DETALLERESERVA WHERE idReserva = \'" + id + "\'";
            conexionBD.EjecutarComando(delete);
            conexionBD.CerrarConexion();
        }


        public void editar_detalleReservaHab(String id, DetalleReservaHab detalleReservaHab)
        {
            string update = "";
            conexionBD.AbrirConexion();
            update = "UPDATE DETALLERESERVA SET numeroItem = @numeroItem, idAmbiente = @idAmbiente, estado = @estado, cantidad = @cantidad, precioUnitario = @precioUnitario, total = @total" +
                      "WHERE id = \'" + id + "\'";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = update;

            command.Parameters.Add("@numeroItem", SqlDbType.Int).Value = detalleReservaHab.numeroItem;
            command.Parameters.Add("@idAmbiente", SqlDbType.Int).Value = detalleReservaHab.idAmbiente;
            command.Parameters.Add("@estado", SqlDbType.Int).Value = detalleReservaHab.estado;
            command.Parameters.Add("@cantidad", SqlDbType.Int).Value = detalleReservaHab.cantidad;
            command.Parameters.Add("@precioUnitario", SqlDbType.Decimal).Value = detalleReservaHab.precioUnitario;
            command.Parameters.Add("@total", SqlDbType.Decimal).Value = detalleReservaHab.total;

            conexionBD.EjecutarComando2(command);
        }
    }
}